//
// Created by 周明 on 2024/5/3.
//
#ifndef SOCKET_ADS_B_H
#define SOCKET_ADS_B_H
#include <iostream>
#include <array>
#include <cmath>
#define PI 3.1415926

// 飞机状态结构体
struct AircraftState {
    double x; // 经度或x轴坐标
    double y; // 纬度或y轴坐标
    double vx; // x轴速度分量
    double vy; // y轴速度分量
    double heading; // 航向，从正北方向顺时针测量，以角度为单位

    // 构造函数
    AircraftState(double x, double y, double vx, double vy, double heading)
            : x(x), y(y), vx(vx), vy(vy), heading(heading) {
      //  std::cout<<"x="<<x<<std::endl;
      //  std::cout<<"y="<<y<<std::endl;
      //  std::cout<<"z="<<z<<std::endl;
      //  std::cout<<"vx="<<vx<<std::endl;
      //  std::cout<<"vy="<<vy<<std::endl;
       // std::cout<<"vz="<<vz<<std::endl;
       // std::cout<<"heading="<<heading<<std::endl;
    }
            bool operator !=(const AircraftState& t){
                if (this != (&t)) {
                    return true;
                }else{
                    return false;}
                }
};
void initarr(std::array<AircraftState*,1024>& otherShips);
// 预测飞机未来位置
AircraftState predictFuturePosition(const AircraftState& current, double time) ;

// 计算两点之间的欧几里得距离
double calculateEuclideanDistance(const AircraftState& a, const AircraftState& b);
// 检查是否存在碰撞风险
bool checkCollisionRisk(int id,AircraftState &ownShip, std::array<AircraftState*,1024>& otherShips, double minSafeDistance, double lookAheadTime);

#endif //SOCKET_ADS_B_H
